package cn.ibdsr.human.exception;

/**
 * @Description 所有业务异常的枚举
 * @author fengshuonan
 * @date 2016年11月12日 下午5:04:51
 */
public enum BizExceptionEnum {

	SUCCESS(200, "请求成功"),

	/**
	 * 字典
	 */
	DICT_EXISTED(400,"字典已经存在"),
	ERROR_CREATE_DICT(500,"创建字典失败"),
	ERROR_WRAPPER_FIELD(500,"包装字典属性失败"),


	/**
	 * 文件上传
	 */
	FILE_READING_ERROR(400,"FILE_READING_ERROR!"),
	FILE_NOT_FOUND(400,"FILE_NOT_FOUND!"),
	UPLOAD_ERROR(500,"上传图片出错"),
	IMAGE_FILE_TYPE_ERROR(400, "图片上传文件类型错误"),
	IMAGE_FILE_CONTENT_ERROR(400, "图片内容错误"),
	IMAGE_FILE_SIZE_ERROR(400, "图片过大，上传失败"),

	/**
	 * 权限和数据问题
	 */
	DB_RESOURCE_NULL(400,"数据库中没有该资源"),
	NO_PERMITION(405, "权限异常"),
	REQUEST_INVALIDATE(400,"请求数据格式不正确"),
	INVALID_KAPTCHA(400,"验证码不正确"),
	CANT_DELETE_ADMIN(600,"不能删除超级管理员"),
	CANT_FREEZE_ADMIN(600,"不能冻结超级管理员"),
	CANT_CHANGE_ADMIN(600,"不能修改超级管理员角色"),

	/**
	 * 账户问题
	 */
	CANCEL_COMPANY(400,"请先取消发布该企业"),
	CANCEL_JOB(400,"请先取消发布该岗位"),
	USER_ALREADY_REG(401,"该用户已经注册"),
	NO_THIS_USER(400,"没有此用户"),
	NO_THIS_JOB(400,"岗位不存在"),
	USER_NOT_EXISTED(400, "没有此用户"),
	COMPANY_NOT_WAITING_FOR_IDENTIFICATION(400, "企业不处于待认证状态"),
	COMPANY_NOT_EXISTED(400, "未提交企业认证信息"),
	COMPANY_NOT_APPLY_IDENTIFY(400, "企业未提交认证"),
	REVIEW_TIP_NOT_EXISTED(400, "不通过原因不能为空"),
	COMPANY_NOT_IDENTIFICATION(400, "企业未认证"),
	COMPANY_NOT_SUCCESS_IDENTIFICATION(400, "企业未完成认证"),
	ACCOUNT_FREEZED(401, "账号被冻结"),
	OLD_PWD_IS_NULL(402,"原密码不能为空"),
	OLD_PWD_NOT_RIGHT(402, "输入的原密码不正确"),
	OLD_NEW_PWD_IS_SAME(403,"新旧密码不能一致"),
	TWO_PWD_NOT_MATCH(405, "两次输入密码不一致"),
	NEWPWD_AND_REPWD_NOT_NULL(405, "新密码和确认密码不能为空"),
	PWD_FORMAT_ERROR(405, "密码格式不正确，只允许字母或数字或符号的组合，6-20个字符"),
	COMPANY_NOT_EXIST(400, "企业不存在"),
	COMPANY_DETIAL_LENGTH_LIMIT(400, "企业介绍不能超过800字"),
	/**
	 * 通用
	 */
	OBJECT_NOT_EXIST(400, "对象不存在"),
	PREVIOUS_NOT_EXIST(400, "前一个元素不存在"),
	NEXT_NOT_EXIST(400, "后一个元素不存在"),


	/**
	 * 售票员
	 */
	TICKET_SELLER_ID_IS_NULL(400,"售票员id不能为空"),
	TICKET_SELLER_NOT_EXIST(400,"售票员不存在"),
	ACCOUNT_EXIST(400, "账号已存在"),
	SYSTYPE_PRAM_ERRO(400, "系统类型参数错误"),
	SYSTYPE_RESET_PASSWORD_ERRO(400, "只能重置求职者的密码"),
	TICKET_SELLER_STATUS_IS_NOT_DISABLE(400, "售票员状态为正常时，不能删除"),
	ACCOUNT_OR_PASSWORD_IS_NULL(400,"登录时输入账号或密码不能为空"),
	ACCOUNT_DISABLE(400,"该账号已被冻结"),
	NOT_COMPANY(400,"企业用户才能修改手机号码"),
	ACCOUNT_IS_NULL(400,"账号不能为空"),
	ACCOUNT_NOT_EXIST(400,"账号不存在"),
	ACCOUNT_IS_SAME_EXIST(400,"与原手机号相同"),
	PASSWORD_ERROR(400, "密码错误"),
	USE_DEFAULT_PASSWORD(400, "您正在使用默认密码登录系统，请修改"),



	/**
	 * 游客信息
	 */
	TOURIST_ID_IS_NULL(1100, "游客ID不能为空"),
	PHONE_FORMAT_ERROR(1101, "手机号码格式错误"),
	TOURIST_ID_CARD_NO_IS_EXIST(1102, "身份证号已存在"),
	TOURIST_ID_CARD_NO_IS_ERROR(400, "身份证号码格式不对"),
	PHONE_IS_ERROR(400, "手机号码格式不对"),
	TOURIST_ID_CARD_NO_IS_REPEAT(400, "游客信息重复"),


	/**
	 * token异常
	 */
	TOKEN_EXPIRED(10000, "token过期"),
	TOKEN_ERROR(10001, "token验证失败"),
	TOKEN_ERROR_OTHER_DEVICE_LOGIN(10002, "本账号已在其他地方登录，如需访问请重新登录"),

	/**
	 * 打印参数
	 */
	PRINT_PARAM_FORMAT_ERROR(1480,"打印参数格式有误，坐标必须为整数"),


	/**
	 * 系统业务限制设置
	 */
	PICTURE_IS_FULL(400, "轮播图已达上限，无法继续添加"),
	BIZ_LIMIT_ID_IS_NULL(1601, "设置ID不能为空"),
	BIZ_LIMIT_NOT_EXIST(1602, "未查询到该业务设置"),
	BIZ_LIMIT_VAL_IS_NULL(1603, "设置值不能为空"),
	DAY_PASSENGER_FLOW_LIMIT(1604, "该日期的预订已满，请更换游玩日期。"),
	PRINT_TICKET_ADVANCE_DAYS_ERROR(1605, "可提前取票天数不能小于0"),

    /**
	 * 错误的请求
	 */
	MENU_PCODE_COINCIDENCE(400,"菜单编号和副编号不能一致"),
	EXISTED_THE_MENU(400,"菜单编号重复，不能添加"),
	DICT_MUST_BE_NUMBER(400,"字典的值必须为数字"),
	REQUEST_NULL(400, "请求有错误"),
	REQUEST_ERROR(400, "请求异常"),
	SOCKET_ERROR(400, "WebSocket连接异常"),
	CODE_ERROR(400, "企业编号已存在"),
	COMPANY_NAME_WRONG(400, "企业名字不能少于两个字"),
	AD_NOT_EXIST(400, "广告不存在"),
	REQUEST_PARAM_IS_NULL(400, "请求参数不能为空"),
	REQUEST_PARAM_IS_ERROR(400, "请求参数错误"),
	SESSION_TIMEOUT(400, "会话超时"),
	RECOGNIZE_ERROR(400, "识别失败"),
	SERVER_ERROR(500, "服务器异常"),
	METHOD_INVOKE_ERROR(500, "方法调用错误"),
	CREDIT_CODE_FORMAT_ERROR(400, "企业统一信用代码格式错误"),
	/**
	 * 人力资源系统
	 */
	SERVIER_INIT_CODE_ERROR(400, "请在服务器配置企业编号长度"),
	SERVIER_INIT_ERROR(400, "请在服务器配置客服电话"),
	TIME_IS_NULL(400, "时间为空"),
	TIME_FORMAT_ERROR(400, "时间格式错误"),
	NOTIFICATION_NOT_EXISTED(400, "通知不存在"),
	;


	BizExceptionEnum(int code, String message) {
		this.friendlyCode = code;
		this.friendlyMsg = message;
	}
	
	BizExceptionEnum(int code, String message,String urlPath) {
		this.friendlyCode = code;
		this.friendlyMsg = message;
		this.urlPath = urlPath;
	}

	private int friendlyCode;

	private String friendlyMsg;
	
	private String urlPath;

	public int getCode() {
		return friendlyCode;
	}

	public void setCode(int code) {
		this.friendlyCode = code;
	}

	public String getMessage() {
		return friendlyMsg;
	}

	public void setMessage(String message) {
		this.friendlyMsg = message;
	}

	public String getUrlPath() {
		return urlPath;
	}

	public void setUrlPath(String urlPath) {
		this.urlPath = urlPath;
	}

	public static BizExceptionEnum valueOf(Integer code) {
		if (code == null) {
			return BizExceptionEnum.SUCCESS;
		} else {
			for (BizExceptionEnum val : BizExceptionEnum.values()) {
				if (val.getCode() == code) {
					return val;
				}
			}
			return BizExceptionEnum.SUCCESS;
		}
	}
}
